home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / examples.zoo / misc / contfuns.lsp next >
Lisp/Scheme  |  1991-10-22  |  869b  |  26 lines

  1. ; Versuche zur Continuation function
  2.  
  3. (defun fk (n)
  4.   (if (zerop n) 1 (* n (fk (- n 1))))
  5. )
  6. ; normale Fakultät
  7.  
  8. (defun fak (n &optional (cont #'identity))
  9.   (if (zerop n)
  10.     (funcall cont 1)
  11.     (fak (- n 1) #'(lambda (u) (funcall cont (* n u))))
  12. ) )
  13. ; Fakultät mit Continuation Function:
  14. ; (fak n cont) ergibt (funcall cont (fk n))
  15.  
  16.  
  17. ; Zum Wesen der Continuation Function:
  18. ; So eine Funktion ist in der Lage, noch auszuführende Anweisungen mitsamt
  19. ; korrektem Einsprungpunkt und den dazugehörigen korrekten statischen
  20. ; Variablenbindungen aufzunehmen. Die Verschachtelung dieser CF's entspricht
  21. ; genau dem Stackaufbau beim gewöhnlichen Abarbeiten.
  22. ; Eine CF  IST  also ein Stack. Er kann abgespeichert werden und wieder zur
  23. ; Ausführung gebracht werden. Damit hat man einen Mechanismus zum kontrol-
  24. ; lierten Umschalten zwischen Kontexten.
  25.  
  26.